package comp.movel.ubiqua;

import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.widget.Toast;

import comp.movel.ubiqua.bluetooth.BluetoothPassaOuRepassaService;
import comp.movel.ubiqua.bluetooth.Constants;
import comp.movel.ubiqua.model.SerializerClass;

public class BluetoothHandler extends Handler {
	JogoActivity jogoActivity;
	
	public BluetoothHandler(JogoActivity jogo){
		jogoActivity = jogo;
	}
	
	@Override
	public void handleMessage(Message msg) {
		switch (msg.what) {
		case Constants.MESSAGE_STATE_CHANGE:
			Log.i(Constants.TAG, "MESSAGE_STATE_CHANGE: " + msg.arg1);
			switch (msg.arg1) {
			// setar label de conectado e exibir nome do device pareado
			case BluetoothPassaOuRepassaService.STATE_CONNECTED:
				Log.d(Constants.TAG, "CONECTADO!");
				jogoActivity.statusConexao.setText(R.string.title_connected_to);
				jogoActivity.statusConexao.append(jogoActivity.mConnectedDeviceName);
				break;

			// setar label de estado conectando
			case BluetoothPassaOuRepassaService.STATE_CONNECTING:
				Log.d(Constants.TAG, "CONECTANDO...");
				jogoActivity.statusConexao.setText(R.string.title_connecting);
				break;

			case BluetoothPassaOuRepassaService.STATE_LISTEN:

			// setar label de estado nao conectado
			case BluetoothPassaOuRepassaService.STATE_NONE:
				Log.d(Constants.TAG, "NAO CONECTADO!");
				jogoActivity.statusConexao.setText(R.string.title_not_connected);
				break;
			}
			break;

		// *** ENVIO DE MENSAGEM ***
		case Constants.MESSAGE_WRITE:
			byte[] writeBuf = (byte[]) msg.obj;
			String writeMessage = new String(writeBuf);
			Log.i(Constants.TAG, "Enviou = " + writeMessage);
			break;

		// *** RECEBIMENTO DE MENSAGEM ***
		case Constants.MESSAGE_READ:
			byte[] readBuf = (byte[]) msg.obj;
			String readMessage = new String(readBuf, 0, msg.arg1);
			Log.i(Constants.TAG, "Recebeu = " + readMessage);
			int perguntaAnterior = -1;
			if (jogoActivity.getJogoController().getPlacar() != null)
				perguntaAnterior = jogoActivity.getJogoController().getPlacar()
						.getIdPerguntaCorrente();
			jogoActivity.getJogoController().setPlacar(SerializerClass
					.deserializePlacar(readMessage));
			// Caso a mensagem enviada foi o placar final.
			if (jogoActivity.getJogoController().getPlacar() == null) {
				Toast.makeText(jogoActivity.getApplicationContext(), readMessage,
						Toast.LENGTH_LONG).show();
				jogoActivity.finish();
				return;
			} else {
				if (jogoActivity.getJogoController().getPlacar().getIdPerguntaCorrente() == perguntaAnterior)
					jogoActivity.atualizarTela();
				else
					jogoActivity.getJogoController().receberPlacar();
				jogoActivity.removerProgresso();
			}
			break;

		// *** PEGAR NOME DO DEVICE CONECTADO ***
		case Constants.MESSAGE_DEVICE_NAME:
			jogoActivity.mConnectedDeviceName = msg.getData().getString(
					Constants.DEVICE_NAME);
			Toast.makeText(jogoActivity.getApplicationContext(),
					"Connected to " + jogoActivity.mConnectedDeviceName,
					Toast.LENGTH_SHORT).show();

			if (jogoActivity.getJogoController().getPlacar() != null) {
				jogoActivity.atualizarPlacar();
			}
			jogoActivity.hidePlacar(false);
			break;

		// *** MOSTRAR TOAST ***
		case Constants.MESSAGE_TOAST:
			Toast.makeText(jogoActivity.getApplicationContext(),
					msg.getData().getString(Constants.TOAST),
					Toast.LENGTH_SHORT).show();
			break;
		}
	}
}